/** 结构值类型 */
export enum StructValueType {
    /** 布尔值 true false  */
    bool,
    /** 字节型 */
    byte,
    /** Uint8Array */
    bytes,
    /** 8位正整型 */
    uint8,
    /** 16位正整型 */
    uint16,
    /** 32位正整型 */
    uint32,
    /** 64位正整型 */
    uint64,
    /** 自适应32位正整型 */
    auint32,
    /** 自适应64位正整型 */
    auint64,
    /** 8位整型 */
    int8,
    /** 16位整型 */
    int16,
    /** 32位整型 */
    int32,
    /** 64位整型 */
    int64,
    /** 自适应长度整型 最大支持到32位 */
    aint32,
    /** 自适应长度整型 最大支持到64位 */
    aint64,
    /** 32位浮点型(精度不准确) */
    float32,
    /** (未实现,先占位)64位浮点型(精度不准确) */
    float64,
    /** 32位正浮点型 编码时会转化为自适应32位正整型 [param:保留几位小数] */
    floatAuint32,
    /** 64位正浮点型 编码时会转化为自适应64位正整型 [param:保留几位小数] */
    floatAuint64,
    /** 32位浮点型 编码时会转化为自适应32位整型 [param:保留几位小数] */
    floatAint32,
    /** 64位浮点型 编码时会转化为自适应64位整型 [param:保留几位小数] */
    floatAint64,
    /** 浮点型 编码时会转化为字符串 */
    floatStr,
    /** utf-8字符串 */
    str,
    /** 自定义结构类型 (param:结构) */
    struct,
    /** any类型 */
    any,
    /** 对象类型 {} */
    obj,
    /** 数组类型 [] */
    arr
}
const SVT = StructValueType;
const numTypeDic: any = {
    [SVT.byte]: 1,
    [SVT.uint8]: 1,
    [SVT.uint16]: 1,
    [SVT.uint32]: 1,
    [SVT.uint64]: 1,
    [SVT.auint32]: 1,
    [SVT.auint64]: 1,
    [SVT.int8]: 1,
    [SVT.int16]: 1,
    [SVT.int32]: 1,
    [SVT.int64]: 1,
    [SVT.aint32]: 1,
    [SVT.aint64]: 1,
    [SVT.float32]: 1,
    [SVT.float64]: 1,
    [SVT.floatAuint32]: 1,
    [SVT.floatAuint64]: 1,
    [SVT.floatAint32]: 1,
    [SVT.floatAint64]: 1,
    [SVT.floatStr]: 1,
}

/**
 * 结构值类型是否是数字类型
 * @param svt 
 */
export function isNumTypeSVT(svt: StructValueType) {
    return numTypeDic[svt] === 1;
}